home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Delphi Programmer's Power Pack
/
Delphi Volume 1.iso
/
e_to_l
/
isamexpt
/
uuseisam.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1996-09-15
|
30KB
|
1,128 lines
{$x+}
{ Useisam.Pas Rev 01.0 vom 9. Juni 89: Isam 3.0 , Turbo 4.0
Rev 02.0 vom 24. April 91: Isam 5.21, Turbo 6.0
Rev 03.0 vom 26. Mai 92: Isam 5.3 , Turbo 6.0
Rev 04.0 vom 3. Januar 93: Isam 5.4 , BP 7.0
Rev 05.0 vom 22. August 95: Filer 5.5, Delphi
Rev 06.0 vom 30. MΣrz 96: Filer 5.52,Delphi
Inhalt: Routinen zur Unterstⁿtzung der Netisam
}
unit Uuseisam;
interface
USES Filer, UToolDll, isamtool;
procedure DIEE;
Procedure DIE;
function IA:boolean; {Testet, ob Dialog-Meldung vorliegt und löscht sie}
function NotFound:boolean; {Testet, ob bei letzter Op. "nicht gef." herauskam}
const Isamwsnr : Longint = 1;
MySAVE : Boolean = FALSE;
var
SatzNoAngel : longint;
IsamFehler : Integer Absolute IsamError;
InitCount : Integer;
type
KeyProc = Function ( Var DSatz; KeyNr : Word ) : IsamKeyStr;
ChangeProc = Function(var DatOld,DatNew;Len:word):boolean;
Function EXISTIsam(IfbPtr:IsamFileBlockPtr;Name:STring):Boolean;
PROCEDURE EXITIsam;
Function INITIsam(Netz:NetSupportType) : Boolean;
PROCEDURE CLEARKEY(VAR IFBPtr : ISAMFILEBLOCKPTR;KEY: INTEGER);
{Setzt den Datensatzzeiger auf den 1. Schlüssel von Key
IFBPtr : Dateivariable
Key : Keynummer
}
PROCEDURE READLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
{Setzt ein READLOCK auf die Datei
IFBPtr : Dateivariable
}
PROCEDURE LOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
{Setzt ein LOCK auf die Datei
IFBPtr : Dateivariable
}
PROCEDURE UNLOCK(VAR IFBPtr : ISAMFILEBLOCKPTR);
{Hebt den READLOCK auf
IFBPtr : Dateivariable
}
procedure SatzLesen (Var IFBPtr : IsamFileBlockPtr;RefNr:longint;
var Ziel,Dup);
{Liest einen Satz aus der angegebenen Isam-Datei.
IFBPtr : Dateivariable
RefNr : Datensatznummer des zu lesenden Satzes
Ziel : Variable, in der der Satz gespeichert werden soll
Dup : muß vom selben Typ wie Ziel sein. Wird von den Schreibprozeduren
verwendet, um festzustellen, ob der Satz inzwischen verändert
wurde. Darf daher nicht von Hand verändert werden.
Bitte anschließend IsamOK beachten.
Fehlermöglichkeiten: wie bei GetNetRec.
}
procedure SatzAendern(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
Var Quelle,Dup;Keys:KeyProc;var OK:boolean);
{Schreibt einen geänderten Satz zurück in die Isam-Datei.
IFBPtr : Dateivariable
RefNr : Datensatznummer des zurückzuschreibenden Satzes
Quelle : zu schreibender Satz
Dup : muß das von SatzLesen erzeugte Duplikat des alten Satzes enthalten
Keys : Zeiger auf eine Funktion, die die Datensatzschlüssel ermittelt.
(s. Anmerkungen zu "type KeyProc" weiter oben.)
OK : enthält OK nach der Ausführung FALSE, so konnte nicht geschrieben
werden, weil der Satz inzwischen verändert wurde oder weil das Än-
dern einen doppelten Hauptschlüssel zur Folge hätte.
Bitte anschließend IsamOk und OK beachten.
Fehlermöglichkeiten: wie bei LockFileBlock, GetNetRec, PutNetRec,
DeleteKey, AddKey, UnlockFile sowie siehe OK.
}
procedure SatzAnlegen(Var IFBPtr:IsamFileBlockPtr;
var Quelle;Keys:KeyProc);
{Legt einen Satz an.
IFBPtr : Dateivariable
Quelle : zu schreibender Satz
Keys : s. SatzAendern, type KeyProc
Bitte anschließend IsamOK beachten.
Fehlermöglichkeiten: wie bei LockFileBlock, AddNetRec, AddKey,
UnlockFile.
}
procedure Satzloeschen(Var IFBPtr:IsamFileBlockPtr;RefNr:longint;
var Dup;Keys:KeyProc;var OK:boolean);
{Löscht einen Satz.
IFBPtr : Dateivariable
RefNr : Nummer des zu löschenden Satzes
Dup : s. SatzAendern
Keys : s. SatzAendern, type KeyProc
OK : s. SatzAendern
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten: s. SatzAendern
}
procedure DateiOeffnen (var IFBPtr:IsamFileBlockPtr;Name:String;Save:boolean;
RSize:longint);
{Öffnet einen Fileblock.
IFBPtr : Dateivariable
Name : Pfad+Vorname der Datei
Save : TRUE, wenn im Savemodus geöffnet werden soll
RSize : Datensatzrecordgröße. Dient der Kontrolle, ob Programm- und
Dateiversion kompatibel sind.
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie Open(Save)NetFileBlock.
}
procedure DateiSchliessen (var IFBPtr:IsamFileBlockPtr);
{Schließt einen Fileblock.
IFBPtr : Dateivariable
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie bei CloseNetFileBlock.
}
procedure KeySuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
var Userdatref:Longint;var Userkey:IsamKeyStr;
var Found:boolean);
{Sucht einen Schlüssel.
IFBPtr : Dateivariable
Key : Schlüsselnummer
UserdatRef : erhält die Datensatznummer des gefundenen Schlüssels
UserKey : zu suchender Schlüssel
Found : TRUE: gewünschter Schlüssel wurde gefunden.
FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
IsamOK=TRUE: er nicht existiert. Userkey enthält den nächsten
größeren Schlüssel.
IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
führt werden konnte.
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie bei SearchKey.
}
procedure RefSuchen (var IFBPtr:IsamFileBlockPtr;Key:integer;
var Userdatref:Longint;var Userkey:IsamKeyStr;
var Found:boolean);
{Sucht einen Schlüssel mit Referenz.
IFBPtr : Dateivariable
Key : Schlüsselnummer
UserdatRef : Datensatznummer des zu suchenden Schlüssels
UserKey : zu suchender Schlüssel
Found : TRUE: gewünschter Schlüssel wurde gefunden.
FALSE: gewünschter Schlüssel wurde nicht gefunden, weil
IsamOK=TRUE: er nicht existiert. Userkey enthält den nächsten
größeren Schlüssel.
IsamOK=FALSE: der Zugriff wegen eines Fehlers nicht durchge-
führt werden konnte.
Bitte anschließend IsamOk beachten.
}
procedure SatzEinlesen(var IFBPtr:IsamFileBlockPtr;Key:integer;
var Satz,Dup;Keys:KeyProc;var Klar:boolean);
{Liest einen Satz ein. Funktionsweise: Die Felder der Variablen "Satz", die
bekannt sind, müssen vor Aufruf besetzt werden (z.B. das Kundennummernfeld,
wenn nach einer Kundennummer gesucht werden soll). Diese Prozedur sucht
dann den passenden Satz und liest ihn ein.
IFBPtr : Dateivariable
Key : Nummer das Schlüssels, anhanddessen gesucht werden soll
Satz : s.o., erhält hinterher den kompletten Satz
Dup : s. SatzLesen
Keys : s. SatzAendern, type KeyProc
Klar : TRUE, wenn der Satz gefunden und ordnungsgemäß gelesen wurde
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie bei SearchKey, GetNetRec.
}
const
FindFirst = 0;
FindLast = 1;
FindNext = 2;
FindPrev = 3;
FindALL = 4;
procedure NachbarKey(var IFBPtr:IsamFileBlockPtr;Key:integer;
var UserDatRef:longint;var UserKey:IsamKeyStr;
SuchArt:byte);
{Sucht den nächsten bzw. vorigen Schlüssel.
IFBPtr : Dateivariable
Key : Schlüsselnummer
UserDatRef : erhält die Datensatznummer des gefundenen Schlüssels
UserKey : erhält den gefundenen Schlüssel
SuchArt : 0=der erste Schlüssel wird gesucht
1=der letzte Schlüssel wird gesucht
2=der nächste Schlüssel wird gesucht
3=der vorige Schlüssel wird gesucht
4=der erste übereinstimmende Schlüssel (FINDKEY) wird gesucht
Bitte anschließend IsamOk beachten.
Fehlermöglichkeiten wie bei NextKey, PrevKey, ClearKey.
}
procedure DeleteAllRecs(var IFBPtr : IsamFileBlockPtr;
VonKey,
BisKey : IsamKeyStr;
Key : integer;